查看原文
其他

浅析分布式存储高可用机制

张志雄 中国金融电脑+ 2022-12-13
验“金”室


长期以来,大型主机凭借其卓越的性能表现、良好的稳定性以及在单机处理能力方面的强大优势,逐渐发展为金融业数据中心的主流存储产品。但是,随着信息技术的快速发展,金融机构的IT系统也逐步开始向虚拟化与云化转型,并对存储资源建设提出了更高的要求,早已不再是为了满足某一业务系统的特殊目标,期间,传统大型存储设备故障排除难度大、扩展性差、建设周期长等劣势也逐渐凸显。


在此背景下,为更好地支持多租户、高并发等业务场景,分布式存储的概念应运而生,其凭借扩展性、伸缩性极强,以及高效、可靠、高可用等特点,迅速成为金融机构应对网络数据流量快速增长、时间窗口日趋紧张等问题的有力抓手。


一、什么是分布式存储


总体而言,分布式存储基于网络可将分散的存储资源建成一个虚拟的存储资源池,然后再把数据分散存储在多台独立的设备上,因此其不仅拥有极高性能的大并发读写、高可用的故障自动隔离、动态扩展以及自动化运维管理等能力,同时也是构建云计算基础架构的重要组成部分之一。


实践中,分布式存储的常用架构大致可分为两类:一类为使用元数据服务器存储数据位置的架构;另一类为无元数据服务器,通过计算来获取数据位置的架构(如图1所示)。


图1 分布式存储架构示意


其中,对前者而言,如果客户端要从某个文件读取数据,首先需要从元数据获取该文件的位置,然后再从该位置获取具体的数据;后者则是客户端可直接与存储节点通信,并通过设备映射关系计算出其写入数据的具体位置。


二、分布式存储的特性


1.弹性扩展

因分布式架构无需配置集中接入组件和模块,所以也消除了单个组件和模块的性能瓶颈,同时还能够以服务器为单位进行扩容,实现性能和容量的同步线性增长,甚至平滑扩展至数千个节点。在此基础上,不仅能有效满足前端应用不断扩展的性能需求,而且在线扩容并不会影响应用系统的正常运行,也不会进一步增加存储系统在管理和使用上的复杂性。


2.高性能

分布式存储系统将数据切片后,一般会通过各种智能算法将数据均衡分布在多个节点上的不同硬盘内,从而使前端应用能够在多个节点上进行条带化的并发读写,并可同时向多个硬盘发出I/O请求,从而获取最优的I/O性能。


3.支持多副本

通常,分布式存储会采用多副本备份机制来保证数据的可靠性,即同一份数据可以复制保存为2~3个副本,多副本模式如图2所示。


图2 多副本模式示意


图2中,存储节点1、2、3上的紫色数据块构成了同一份数据的3个副本,当存储节点1的硬盘出现故障时,节点2、3的数据块将继续提供存储服务。同时,该模式还会要求数据写入时采用强一致性保护,即只有当数据均成功写入三份副本后,才算写入操作完成。


4.故障自愈能力

故障自愈能力是指即便个别机器出现故障、损坏等情况,存储服务仍能够保持不中断且一直可用的状态,同时确保故障节点可被快速隔离。此外,自愈能力还包括自动从其他节点的副本中恢复数据,并利用系统中剩余的所有硬盘进行数据重构,进而避免因二次硬件故障带来数据丢失的风险。


三、落地分布式存储的思路与挑战


当前,金融企业最需要的是安全稳定的系统运行环境,而存储数据也必须是高可靠、高可用的,所以要衡量分布式存储能否在金融行业落地,容错能力是其中重要的指标之一。结合高可用机制而言,则是除了传统架构中的备份、双活、多活等策略,还需要系统能针对各类单点故障快速进行识别和处理,进而实现自动化的容错功能。


1.故障识别能力

一般情况下,由于分布式存储的资源都是分摊在各个节点上,因此单节点上的一个服务异常、硬盘故障、网口丢包,都会将影响扩散至整个集群。此外,其他常见的故障类型还包括硬盘I/O卡顿、悬挂,RAID卡、服务器模组、总线等出现故障,以及网络丢包、时延增加等情况。在此背景下,如何在短时间内识别并正确处理众多已知或未知故障,已成为当前提升分布式存储系统高可用能力的关键问题之一。


对此,分布式存储大多是通过建立广泛的故障模型,对各类关键指标信息进行监控,进而评估硬盘健康度/磨损度、服务器CPU/内存状态、节点之间“心跳”是否正常等,以及预测故障发生的可能性并提前预警,以消除潜在隐患。


2.亚健康检测能力

(1)慢盘检测


慢盘检测是指在分布式存储系统中对硬盘的I/O响应时间进行监控,如果发现其超过了设定的阈值,那么在一段时间内便会通过读取其他数据副本的方式来快速响应业务,从而减少I/O反应变慢导致的业务卡顿或中断风险。同时,管理服务还会继续对该盘I/O进行检测,当发现持续异常时,则将其标记为Down隔离出集群。


(2)I/O悬挂探测


在部分场景下,负责RAID卡或者硬盘内部异常处理的Reset机制会导致部分硬盘上的I/O悬挂,而I/O处于悬挂状态时将无任何信息反馈,从而导致上层主机访问无响应。针对此类I/O悬挂场景,重点是要多方位进行监测控制,即当发现I/O超过几秒无返回时,可对该盘做异常标记,如果后续I/O也不再下发到此硬盘,则主动发起探测I/O对该盘进行检测,以求在快速恢复业务的同时,主动识别故障并进行隔离处理。


(3)节点异常处理


在单台服务器的运行过程中,一旦因软硬件故障导致其进入亚健康状态,则数据访问此节点时会出现缓慢、卡顿等情况,此时整个系统的性能都会被影响。针对此类场景,管理系统可通过收集、监控各服务器的关键信息,比如CPU降速、内存不足导致的访问降速等,进行智能分析诊断并定位问题节点。例如,当发现某服务器状态异常时,会将此节点所有硬盘服务快速标记为Down,并对问题节点进行隔离,以避免其拖累整个系统性能。


(4)网络亚健康隔离


对于网络来说,网卡降速、丢包/错包率增加等网络故障也会引起I/O的高延时响应,并导致集群写入性能下降甚至写入失败等情况出现。对此,分布式存储系统通过节点自身的网络异常快速检测功能,以及其他节点监控上报等机制,将可快速定位亚健康节点,并对其进行网口切换、节点隔离,以避免网络故障持续影响整个集群性能。


3.快速处置能力

基于金融行业应用系统安全稳定的需求,要求分布式存储对故障的处理速度必须足够快。以Java应用举例,当某个硬盘亚健康出现I/O悬挂时,由于磁盘读写功能异常,将会造成应用虚机上Java的GC日志不能正常写入,并引发整体Java线程停顿,最终出现交易超时、返回报错等情况。对于该问题,可理解为分布式存储系统故障识别处理时间超过了业务所能容忍的最大期限,引起了业务中断的风险,而通过研究发现,10s内的故障影响时间对金融业务基本可实现客户无感知,而这也是当前分布式存储系统在故障处理速度方面提升的主要目标之一。


4.存储之外的架构优化

在金融领域,一般会对数据可靠性及系统可用性提出更高的要求,因此对分布式存储系统而言,除保证自身的高可用机制外,针对其部署高可用架构也是必不可少的环节之一,高可用存储架构如图3所示。


图3 高可用存储架构示意


例如,对于单个存储池的服务器,可进行机柜级容灾部署来保证服务的高可用,即一份数据以三副本的形式,分别保存在机柜1至机柜N中3个机柜上某台设备的某个磁盘上,而机柜数量一般要大于或等于4台,从而保证集群在整个机柜出现故障的情况下,仍能有三个机柜继续执行三副本策略,并正常提供存储服务。


此外,一个存储集群通常会包含两个或两个以上的存储池,并可通过云内存储组件来配置不同的后端存储类型A和B,用于对接不同的计算资源主机组,而上层业务虚机则是在A、B主机组中实行高可用部署,以确保单个存储池出现故障时业务不中断。同时,从整个云平台的系统架构来看,存储集群一般采用多集群(主/备)高可用部署,业务同时部署在主、备两个集群,当整个主集群故障不可用时,可快速切换到备集群,从而在分钟级内恢复业务。


四、未来展望


综上所述,分布式存储基于高效率、高可用以及横向扩展、弹性伸缩等优势,充分满足了云计算时代对高性能、高容量、高扩展性的需求,不仅极大地节省了存储资源,且诸如Web服务器、WAS服务器、容器宿主机、文件共享等应用也已经逐步在业内推广。但是,由于分布式存储拓扑结构的复杂性以及软硬件故障的不确定性,其出现故障的概率也大大增加,因此未来在高可用方面仍需进一步提升。


例如,全面覆盖各类已知软硬件故障,提炼实际场景中出现的各种故障模型,以及针对故障进行提前预警、隔离和快速恢复处置等。然而,鉴于IT系统的复杂性,很难保证没有异常场景被遗漏。所以,实践中还需对业务下发的I/O进行实时监控及快速响应,并以最接近业务的方式来实现对异常节点的快速隔离和恢复,进而保证整个存储资源可持续正常对外提供服务,不断提升其在高可用方面的核心能力。



FCC30+

长按左边二维码

关注我们不迷路



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存